shell 练习-成员分组

需求是,把所有的成员平均得分成若干个小组。这里,我会提供一个人员列表,比如成员有50人,需要分成7个小组,要求随机性,每次和每次分组的结构应该不一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#假设成员列表文件为members.txt
#!/bin/bash
f=members.txt
n=`wc -l $f|awk '{print $1}'`
get_n()
{
l=`echo $1|wc -c`
n1=$RANDOM
n2=$[$n1+$l]
g_id=$[$n1%7]
if [ $g_id -eq 0 ]
then
g_id=7
fi
echo $g_id
}
for i in `seq 1 7`
do
[ -f n_$i.txt ] && rm -f n_$i.txt
done
for i in `seq 1 $n`
do
name=`sed -n "$i"p $f`
g=`get_n $name`
echo $name >> n_$g.txt
done
nu(){
wc -l $1|awk '{print $1}'
}
max(){
ma=0
for i in `seq 1 7`
do
n=`nu n_$i.txt`
if [ $n -gt $ma ]
then
ma=$n
fi
done
echo $ma
}
min(){
mi=50
for i in `seq 1 7`
do
n=`nu n_$i.txt`
if [ $n -lt $mi ]
then
mi=$n
fi
done
echo $mi
}
ini_min=1
while [ $ini_min -le 7 ]
do
m1=`max`
m2=`min`
ini_min=m2
for i in `seq 1 7`
do
n=`nu n_$i.txt`
if [ $n -eq $m1 ]
then
f1=n_$i.txt
elif [ $n -eq $m2 ]
then
f2=n_$i.txt
fi
done
name=`tail -n1 $f1`
echo $name >> $f2
sed -i "/$name/d" $f1
ini_min=$[$ini_min+1]
done
for i in `seq 1 7`
do
echo "$i 组成员有:"
cat n_$i.txt
echo
done